home *** CD-ROM | disk | FTP | other *** search
/ 9-Digit Zip Code Directory / 9-Digit Zip Code Directory (American Business Information) (ABIZIP-12).ISO / z4src.zip / Z4ABBLD.C < prev    next >
C/C++ Source or Header  |  1995-05-02  |  48KB  |  850 lines

  1. //----------------------------------------------------------------------------
  2. //                            MODULE DESCRIPTION
  3. //
  4. //  Module:    z4abbld.c
  5. //   Title:    9-Digit ZIP Code Directory -- on CD-ROM
  6. //  Notice:    John M. Weeder
  7. //                 Copyright (c) 1993. All rights reserved.
  8. //             This module contains proprietary information and should be 
  9. //                treated as confidential.
  10. //
  11. //----------------------------------------------------------------------------
  12. //                           MAINTENANCE HISTORY
  13. //
  14. // $Workfile$
  15. // $Revision$
  16. //   $Author$
  17. //     $Date$
  18. //      $Log$    
  19. //
  20. //----------------------------------------------------------------------------
  21. //                             MODULE NARRATIVE
  22. //
  23. //    This module contains the program entry point for
  24. //
  25. //    The code in this module may be written in C++ or C.
  26. //
  27. //    This module is portable to:
  28. //        DOS 3.X+
  29. //        MS Windows 3.X+
  30. //        OS/2 2.X+
  31. //        OS/2 2.0 PM
  32. //
  33. //    The following compilers are supported:
  34. //        MSC 6.0A
  35. //        MSC/C++ 7.0
  36. //        Borland C++ 3.1 for DOS
  37. //        Borland C++ 1.0 for OS/2 2.X
  38. //
  39. //----------------------------------------------------------------------------
  40. #include <z4.h>
  41.  
  42.  
  43. //----------------------------------------------------------------------------
  44. //    Stack size
  45. //----------------------------------------------------------------------------
  46. #if COMPILER_BORLAND && (OS_DOS || OS_WINDOWS)
  47. unsigned _stklen = 0x4000;
  48. #endif
  49.  
  50.  
  51. //----------------------------------------------------------------------------
  52. //    Abbreviation table
  53. //----------------------------------------------------------------------------
  54. typedef struct _Z4_ABBR_ENTRY
  55. {
  56.     PSZ psz1;
  57.     PSZ psz2;
  58.     PSZ psz3;
  59.     FLAG16 fs;
  60. } Z4_ABBR_ENTRY;
  61.  
  62. #define MAX_ENTRIES        (2048)
  63. SIZET cEntries;
  64.  
  65. static Z4_ABBR_ENTRY entry[MAX_ENTRIES] =
  66. {
  67.     { "ONE",               "FIRST",                    "1",            Z4_P_NUMERIC },
  68.     { "TWO",              "SECOND",               "2",           Z4_P_NUMERIC },
  69.     { "THREE",              "THIRD",                   "3",           Z4_P_NUMERIC },
  70.     { "FOUR",              "FOURTH",               "4",           Z4_P_NUMERIC },
  71.     { "FORTH",              "FOURTH",               "4",           Z4_P_NUMERIC },
  72.     { "FIVE",              "FIFTH",                   "5",           Z4_P_NUMERIC },
  73.     { "SIX",              "SIXTH",                   "6",           Z4_P_NUMERIC },
  74.     { "SEVEN",              "SEVENTH",               "7",           Z4_P_NUMERIC },
  75.     { "EIGHT",              "EIGHTH",                "8",           Z4_P_NUMERIC },
  76.     { "NINE",              "NINETH",                "9",           Z4_P_NUMERIC },
  77.     { "TEN",              "TENTH",                   "10",          Z4_P_NUMERIC },
  78.     { "TWELVE",           "TWELVETH",                "12",          Z4_P_NUMERIC },
  79.     { "THIRTEEN",           "THIRTEENTH",            "13",          Z4_P_NUMERIC },
  80.     { "FOURTEEN",           "FOURTEENTH",            "14",          Z4_P_NUMERIC },
  81.     { "FIFTEEN",           "FIFTEENTH",            "15",          Z4_P_NUMERIC },
  82.     { "SIXTEEN",           "SIXTEENTH",            "16",          Z4_P_NUMERIC },
  83.     { "SEVENTEEN",        "SEVENTEENTH",            "17",          Z4_P_NUMERIC },
  84.     { "EIGHTEEN",           "EIGHTEENTH",            "18",          Z4_P_NUMERIC },
  85.     { "NINETEEN",           "NINETEENTH",            "19",          Z4_P_NUMERIC },
  86.     { "TWENTY",           "TWENTIETH",            "20",          Z4_P_NUMERIC },
  87.     { "THIRTY",           "THIRTIETH",            "30",          Z4_P_NUMERIC },
  88.     { "FORTY",               "FORTIETH",               "40",          Z4_P_NUMERIC },
  89.     { "FIFTY",               "FIFTIETH",               "50",          Z4_P_NUMERIC },
  90.     { "SIXTY",               "SIXTIETH",               "60",          Z4_P_NUMERIC },
  91.     { "SEVENTY",           "SEVENTIETH",            "70",          Z4_P_NUMERIC },
  92.     { "EIGHTY",           "EIGHTIETH",            "80",          Z4_P_NUMERIC },
  93.     { "NINETY",           "NINETIETH",            "90",          Z4_P_NUMERIC },
  94.     { "HUNDRED",           "HUNDREDTH",            "100",         Z4_P_NUMERIC },
  95.     { "THOUSAND",           "THOUSANDTH",            "1000",        Z4_P_NUMERIC },
  96.     { "#",                 "#",                       "#",           Z4_P_UNIT|Z4_P_OTHER   },
  97.    { "ALLEE",           "ALLEY",             "ALY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  98.    { "ALLY",            "ALLEY",             "ALY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  99.    { "ALY",             "ALLEY",             "ALY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  100.    { "ANEX",            "ANNEX",             "ANX",         Z4_P_SUFFIX|Z4_P_ALPHA },
  101.    { "ANNX",            "ANNEX",             "ANX",         Z4_P_SUFFIX|Z4_P_ALPHA },
  102.    { "ANX",             "ANNEX",             "ANX",         Z4_P_SUFFIX|Z4_P_ALPHA },
  103.    { "APT",             "APARTMENT",         "APT",         Z4_P_UNIT|Z4_P_ALPHA   },
  104.    { "ARC",             "ARCADE",            "ARC",         Z4_P_SUFFIX|Z4_P_ALPHA },
  105.    { "AV",              "AVENUE",            "AVE",         Z4_P_SUFFIX|Z4_P_ALPHA },
  106.    { "AVE",             "AVENUE",            "AVE",         Z4_P_SUFFIX|Z4_P_ALPHA },
  107.    { "AVEN",            "AVENUE",            "AVE",         Z4_P_SUFFIX|Z4_P_ALPHA },
  108.    { "AVENU",           "AVENUE",            "AVE",         Z4_P_SUFFIX|Z4_P_ALPHA },
  109.    { "AVN",             "AVENUE",            "AVE",         Z4_P_SUFFIX|Z4_P_ALPHA },
  110.    { "AVNUE",           "AVENUE",            "AVE",         Z4_P_SUFFIX|Z4_P_ALPHA },
  111.    { "BAYOO",           "BAYOU",             "BYU",         Z4_P_SUFFIX|Z4_P_ALPHA },
  112.    { "BCH",             "BEACH",             "BCH",         Z4_P_SUFFIX|Z4_P_ALPHA },
  113.    { "BG",              "BURG",              "BG",          Z4_P_SUFFIX|Z4_P_ALPHA },
  114.    { "BLDG",            "BUILDING",          "BLDG",        Z4_P_UNIT|Z4_P_ALPHA   },
  115.    { "BLF",             "BLUFF",             "BLF",         Z4_P_SUFFIX|Z4_P_ALPHA },
  116.     { "BLUF",            "BLUFF",             "BLF",         Z4_P_SUFFIX|Z4_P_ALPHA },
  117.    { "BLUFFS",          "BLUFF",             "BLF",         Z4_P_SUFFIX|Z4_P_ALPHA },
  118.    { "BLVD",            "BOULEVARD",         "BLVD",        Z4_P_SUFFIX|Z4_P_ALPHA },
  119.    { "BND",             "BEND",              "BND",         Z4_P_SUFFIX|Z4_P_ALPHA },
  120.    { "BOT",             "BOTTOM",            "BTM",         Z4_P_SUFFIX|Z4_P_ALPHA },
  121.    { "BOTTM",           "BOTTOM",            "BTM",         Z4_P_SUFFIX|Z4_P_ALPHA },
  122.    { "BOUL",            "BOULEVARD",         "BLVD",        Z4_P_SUFFIX|Z4_P_ALPHA },
  123.    { "BOULV",           "BOULEVARD",         "BLVD",        Z4_P_SUFFIX|Z4_P_ALPHA },
  124.    { "BR",              "BRANCH",            "BR",          Z4_P_SUFFIX|Z4_P_ALPHA },
  125.    { "BRDGE",           "BRIDGE",            "BRG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  126.    { "BRG",             "BRIDGE",            "BRG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  127.    { "BRK",             "BROOK",             "BRK",         Z4_P_SUFFIX|Z4_P_ALPHA },
  128.    { "BRNCH",           "BRANCH",            "BR",          Z4_P_SUFFIX|Z4_P_ALPHA },
  129.    { "BROOKS",          "BROOK",             "BRK",         Z4_P_SUFFIX|Z4_P_ALPHA },
  130.    { "BSMT",            "BASEMENT ",         "BSMT",        Z4_P_UNIT|Z4_P_EXCEPT|Z4_P_ALPHA   },
  131.    { "BTM",             "BOTTOM",            "BTM",         Z4_P_SUFFIX|Z4_P_ALPHA },
  132.    { "BURGS",           "BURG",              "BG",          Z4_P_SUFFIX|Z4_P_ALPHA },
  133.    { "BYP",             "BYPASS",            "BYP",         Z4_P_SUFFIX|Z4_P_ALPHA },
  134.    { "BYPA",            "BYPASS",            "BYP",         Z4_P_SUFFIX|Z4_P_ALPHA },
  135.    { "BYPAS",           "BYPASS",            "BYP",         Z4_P_SUFFIX|Z4_P_ALPHA },
  136.    { "BYPS",            "BYPASS",            "BYP",         Z4_P_SUFFIX|Z4_P_ALPHA },
  137.    { "BYU",             "BAYOU",             "BYU",         Z4_P_SUFFIX|Z4_P_ALPHA },
  138.    { "CANYN",           "CANYON",            "CYN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  139.    { "CAUSWAY",         "CAUSEWAY",          "CSWY",        Z4_P_SUFFIX|Z4_P_ALPHA },
  140.    { "CEN",             "CENTER",            "CTR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  141.    { "CENT",            "CENTER",            "CTR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  142.    { "CENTERS",         "CENTER",            "CTR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  143.    { "CENTR",           "CENTER",            "CTR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  144.    { "CENTRE",          "CENTER",            "CTR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  145.    { "CIR",             "CIRCLE",            "CIR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  146.    { "CIRC",            "CIRCLE",            "CIR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  147.    { "CIRCL",           "CIRCLE",            "CIR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  148.    { "CIRCLES",         "CIRCLE",            "CIR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  149.    { "CLB",             "CLUB",              "CLB",         Z4_P_SUFFIX|Z4_P_ALPHA },
  150.     { "CLF",             "CLIFFS",            "CLFS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  151.    { "CLFS",            "CLIFFS",            "CLFS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  152.    { "CLIFF",           "CLIFFS",            "CLFS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  153.    { "CMP",             "CAMP",              "CP",          Z4_P_SUFFIX|Z4_P_ALPHA },
  154.    { "CNTER",           "CENTER",            "CTR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  155.    { "CNTR",            "CENTER",            "CTR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  156.    { "CNYN",            "CANYON",            "CYN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  157.    { "COR",             "CORNER",            "COR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  158.    { "CORS",            "CORNERS",           "CORS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  159.    { "COVES",           "COVE",              "CV",          Z4_P_SUFFIX|Z4_P_ALPHA },
  160.    { "CP",              "CAMP",              "CP",          Z4_P_SUFFIX|Z4_P_ALPHA },
  161.    { "CPE",             "CAPE",              "CPE",         Z4_P_SUFFIX|Z4_P_ALPHA },
  162.    { "CRCL",            "CIRCLE",            "CIR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  163.    { "CRCLE",           "CIRCLE",            "CIR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  164.    { "CRECENT",         "CRESCENT",          "CRES",        Z4_P_SUFFIX|Z4_P_ALPHA },
  165.    { "CRES",            "CRESCENT",          "CRES",        Z4_P_SUFFIX|Z4_P_ALPHA },
  166.    { "CRESENT",         "CRESCENT",          "CRES",        Z4_P_SUFFIX|Z4_P_ALPHA },
  167.    { "CRK",             "CREEK",             "CRK",         Z4_P_SUFFIX|Z4_P_ALPHA },
  168.    { "CRSCNT",          "CRESCENT",          "CRES",        Z4_P_SUFFIX|Z4_P_ALPHA },
  169.    { "CRSE",            "COURSE",            "CRSE",        Z4_P_SUFFIX|Z4_P_ALPHA },
  170.     { "CRSENT",          "CRESCENT",          "CRES",        Z4_P_SUFFIX|Z4_P_ALPHA },
  171.    { "CRSNT",           "CRESCENT",          "CRES",        Z4_P_SUFFIX|Z4_P_ALPHA },
  172.    { "CRSSNG",          "CROSSING",          "XING",        Z4_P_SUFFIX|Z4_P_ALPHA },
  173.    { "CSWY",            "CAUSEWAY",          "CSWY",        Z4_P_SUFFIX|Z4_P_ALPHA },
  174.    { "CT",              "COURT",             "CT",          Z4_P_SUFFIX|Z4_P_ALPHA },
  175.    { "CTR",             "CENTER",            "CTR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  176.    { "CTS",             "COURTS",            "CTS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  177.    { "CV",              "COVE",              "CV",          Z4_P_SUFFIX|Z4_P_ALPHA },
  178.    { "CYN",             "CANYON",            "CYN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  179.    { "DEPT",            "DEPARTMENT",        "DEPT",        Z4_P_UNIT|Z4_P_ALPHA   },
  180.    { "DIV",             "DIVIDE",            "DV",          Z4_P_SUFFIX|Z4_P_ALPHA },
  181.    { "DL",              "DALE",              "DL",          Z4_P_SUFFIX|Z4_P_ALPHA },
  182.    { "DM",              "DAM",               "DM",          Z4_P_SUFFIX|Z4_P_ALPHA },
  183.    { "DR",              "DRIVE",             "DR",          Z4_P_SUFFIX|Z4_P_ALPHA },
  184.     { "DRIV",            "DRIVE",             "DR",          Z4_P_SUFFIX|Z4_P_ALPHA },
  185.    { "DRIVES",          "DRIVE",             "DR",          Z4_P_SUFFIX|Z4_P_ALPHA },
  186.    { "DRV",             "DRIVE",             "DR",          Z4_P_SUFFIX|Z4_P_ALPHA },
  187.    { "DV",              "DIVIDE",            "DV",          Z4_P_SUFFIX|Z4_P_ALPHA },
  188.    { "DVD",             "DIVIDE",            "DV",          Z4_P_SUFFIX|Z4_P_ALPHA },
  189.    { "E",               "EAST",              "E",           Z4_P_DIR|Z4_P_ALPHA    },
  190.    { "EST",             "ESTATE",            "EST",         Z4_P_SUFFIX|Z4_P_ALPHA },
  191.    { "ESTATES",         "ESTATE",            "EST",         Z4_P_SUFFIX|Z4_P_ALPHA },
  192.    { "ESTS",            "ESTATE",            "EST",         Z4_P_SUFFIX|Z4_P_ALPHA },
  193.    { "EXP",             "EXPRESSWAY",        "EXPY",        Z4_P_SUFFIX|Z4_P_ALPHA },
  194.    { "EXPR",            "EXPRESSWAY",        "EXPY",        Z4_P_SUFFIX|Z4_P_ALPHA },
  195.    { "EXPRESS",         "EXPRESSWAY",        "EXPY",        Z4_P_SUFFIX|Z4_P_ALPHA },
  196.    { "EXPW",            "EXPRESSWAY",        "EXPY",        Z4_P_SUFFIX|Z4_P_ALPHA },
  197.    { "EXPY",            "EXPRESSWAY",        "EXPY",        Z4_P_SUFFIX|Z4_P_ALPHA },
  198.    { "EXT",             "EXTENSION",         "EXT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  199.    { "EXTN",            "EXTENSION",         "EXT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  200.    { "EXTNSN",          "EXTENSION",         "EXT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  201.    { "EXTS",            "EXTENSION",         "EXT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  202.    { "FALL",            "FALL",              "FALL",        Z4_P_SUFFIX|Z4_P_ALPHA },
  203.    { "FL",              "FLOOR",             "FL",          Z4_P_UNIT|Z4_P_ALPHA   },
  204.    { "FLATS",           "FLAT",              "FLT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  205.    { "FLD",             "FIELD",             "FLD",         Z4_P_SUFFIX|Z4_P_ALPHA },
  206.    { "FLDS",            "FIELDS",            "FLDS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  207.    { "FLS",             "FALLS",             "FLS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  208.    { "FLT",             "FLAT",              "FLT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  209.    { "FLTS",            "FLAT",              "FLT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  210.    { "FORDS",           "FORD",              "FRD",         Z4_P_SUFFIX|Z4_P_ALPHA },
  211.    { "FORESTS",         "FOREST",            "FRST",        Z4_P_SUFFIX|Z4_P_ALPHA },
  212.    { "FORG",            "FORGE",             "FRG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  213.    { "FORGES",          "FORGE",             "FRG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  214.    { "FRD",             "FORD",              "FRD",         Z4_P_SUFFIX|Z4_P_ALPHA },
  215.    { "FREEWY",          "FREEWAY",           "FWY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  216.    { "FRG",             "FORGE",             "FRG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  217.    { "FRK",             "FORK",              "FRK",         Z4_P_SUFFIX|Z4_P_ALPHA },
  218.    { "FRKS",            "FORKS",             "FRKS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  219.     { "FRNT",            "FRONT",             "FRNT",        Z4_P_UNIT|Z4_P_EXCEPT|Z4_P_ALPHA   },
  220.    { "FRRY",            "FERRY",             "FRY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  221.    { "FRST",            "FOREST",            "FRST",        Z4_P_SUFFIX|Z4_P_ALPHA },
  222.    { "FRT",             "FORT",              "FT",          Z4_P_SUFFIX|Z4_P_ALPHA },
  223.    { "FRWAY",           "FREEWAY",           "FWY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  224.    { "FRWY",            "FREEWAY",           "FWY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  225.    { "FRY",             "FERRY",             "FRY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  226.    { "FT",              "FORT",              "FT",          Z4_P_SUFFIX|Z4_P_ALPHA },
  227.    { "FWY",             "FREEWAY",           "FWY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  228.    { "GARDEN",          "GARDENS",           "GDNS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  229.    { "GARDN",           "GARDENS",           "GDNS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  230.    { "GATEWY",          "GATEWAY",           "GTWY",        Z4_P_SUFFIX|Z4_P_ALPHA },
  231.    { "GATWAY",          "GATEWAY",           "GTWY",        Z4_P_SUFFIX|Z4_P_ALPHA },
  232.    { "GDN",             "GARDENS",           "GDNS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  233.    { "GDNS",            "GARDENS",           "GDNS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  234.    { "GLENS",           "GLEN",              "GLN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  235.    { "GLN",             "GLEN",              "GLN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  236.    { "GRDEN",           "GARDENS",           "GDNS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  237.    { "GRDN",            "GARDENS",           "GDNS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  238.    { "GRDNS",           "GARDENS",           "GDNS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  239.    { "GREENS",          "GREEN",             "GRN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  240.    { "GRN",             "GREEN",             "GRN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  241.    { "GROV",            "GROVE",             "GRV",         Z4_P_SUFFIX|Z4_P_ALPHA },
  242.    { "GROVES",          "GROVE",             "GRV",         Z4_P_SUFFIX|Z4_P_ALPHA },
  243.    { "GRV",             "GROVE",             "GRV",         Z4_P_SUFFIX|Z4_P_ALPHA },
  244.    { "GTWAY",           "GATEWAY",           "GTWY",        Z4_P_SUFFIX|Z4_P_ALPHA },
  245.    { "GTWY",            "GATEWAY",           "GTWY",        Z4_P_SUFFIX|Z4_P_ALPHA },
  246.    { "HARB",            "HARBOR",            "HBR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  247.    { "HARBORS",         "HARBOR",            "HBR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  248.    { "HARBR",           "HARBOR",            "HBR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  249.    { "HAVN",            "HAVEN",             "HVN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  250.    { "HBR",             "HARBOR",            "HBR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  251.    { "HEIGHT",          "HEIGHTS",           "HTS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  252.    { "HIGHWY",          "HIGHWAY",           "HWY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  253.     { "HIWAY",           "HIGHWAY",           "HWY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  254.    { "HIWY",            "HIGHWAY",           "HWY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  255.    { "HL",              "HILL",              "HL",          Z4_P_SUFFIX|Z4_P_ALPHA },
  256.    { "HLLW",            "HOLLOW",            "HOLW",        Z4_P_SUFFIX|Z4_P_ALPHA },
  257.    { "HLS",             "HILLS",             "HLS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  258.    { "HNGR",            "HANGER",            "HNGR",        Z4_P_UNIT|Z4_P_ALPHA   },
  259.    { "HOLLOWS",         "HOLLOW",            "HOLW",        Z4_P_SUFFIX|Z4_P_ALPHA },
  260.    { "HOLW",            "HOLLOW",            "HOLW",        Z4_P_SUFFIX|Z4_P_ALPHA },
  261.    { "HOLWS",           "HOLLOW",            "HOLW",        Z4_P_SUFFIX|Z4_P_ALPHA },
  262.    { "HRBOR",           "HARBOR",            "HBR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  263.    { "HT",              "HEIGHTS",           "HTS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  264.    { "HTS",             "HEIGHTS",           "HTS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  265.    { "HVN",             "HAVEN",             "HVN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  266.    { "HWAY",            "HIGHWAY",           "HWY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  267.    { "HWY",             "HIGHWAY",           "HWY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  268.    { "INLT",            "INLET",             "INLT",        Z4_P_SUFFIX|Z4_P_ALPHA },
  269.    { "IS",              "ISLAND",            "IS",          Z4_P_SUFFIX|Z4_P_ALPHA },
  270.    { "ISLE",            "ISLE",              "ISLE",        Z4_P_SUFFIX|Z4_P_ALPHA },
  271.    { "ISLES",           "ISLE",              "ISLE",        Z4_P_SUFFIX|Z4_P_ALPHA },
  272.    { "ISLND",           "ISLAND",            "IS",          Z4_P_SUFFIX|Z4_P_ALPHA },
  273.    { "ISLNDS",          "ISLANDS",           "ISS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  274.    { "ISS",             "ISLANDS",           "ISS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  275.    { "JCT",             "JUNCTION",          "JCT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  276.    { "JCTION",          "JUNCTION",          "JCT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  277.    { "JCTN",            "JUNCTION",          "JCT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  278.    { "JCTNS",           "JUNCTION",          "JCT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  279.    { "JCTS",            "JUNCTION",          "JCT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  280.    { "JUNCTIONS",       "JUNCTION",          "JCT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  281.    { "JUNCTN",          "JUNCTION",          "JCT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  282.    { "JUNCTON",         "JUNCTION",          "JCT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  283.    { "KEYS",            "KEY",               "KY",          Z4_P_SUFFIX|Z4_P_ALPHA },
  284.    { "KNL",             "KNOLLS",            "KNLS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  285.    { "KNLS",            "KNOLLS",            "KNLS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  286.    { "KNOL",            "KNOLLS",            "KNLS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  287.    { "KNOLL",           "KNOLLS",            "KNLS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  288.     { "KY",              "KEY",               "KY",          Z4_P_SUFFIX|Z4_P_ALPHA },
  289.    { "KYS",             "KEY",               "KY",          Z4_P_SUFFIX|Z4_P_ALPHA },
  290.    { "LANES",           "LANE",              "LN",          Z4_P_SUFFIX|Z4_P_ALPHA },
  291.    { "LBBY",            "LOBBY",             "LBBY",        Z4_P_UNIT|Z4_P_EXCEPT|Z4_P_ALPHA   },
  292.    { "LCK",             "LOCKS",             "LCKS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  293.    { "LCKS",            "LOCKS",             "LCKS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  294.    { "LDG",             "LODGE",             "LDG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  295.    { "LDGE",            "LODGE",             "LDG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  296.    { "LF",              "LOAF",              "LF",          Z4_P_SUFFIX|Z4_P_ALPHA },
  297.    { "LGT",             "LIGHT",             "LGT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  298.    { "LIGHTS",          "LIGHT",             "LGT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  299.    { "LK",              "LAKE",              "LK",          Z4_P_SUFFIX|Z4_P_ALPHA },
  300.    { "LKS",             "LAKES",             "LKS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  301.    { "LN",              "LANES",             "LN",          Z4_P_SUFFIX|Z4_P_ALPHA },
  302.    { "LNDG",            "LANDING",           "LNDG",        Z4_P_SUFFIX|Z4_P_ALPHA },
  303.    { "LNDNG",           "LANDING",           "LNDG",        Z4_P_SUFFIX|Z4_P_ALPHA },
  304.    { "LOCK",            "LOCKS",             "LCKS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  305.    { "LODG",            "LODGE",             "LDG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  306.    { "LOOP",            "LOOP",              "LOOP",        Z4_P_SUFFIX|Z4_P_ALPHA },
  307.    { "LOOPS",           "LOOP",              "LOOP",        Z4_P_SUFFIX|Z4_P_ALPHA },
  308.    { "LOWR",            "LOWER",             "LOWR",        Z4_P_UNIT|Z4_P_EXCEPT|Z4_P_ALPHA   },
  309.    { "LOT",             "LOT",               "LOT",         Z4_P_UNIT|Z4_P_ALPHA   },
  310.    { "MALL",            "MALL",              "MALL",        Z4_P_SUFFIX|Z4_P_ALPHA },
  311.    { "MANORS",          "MANOR",             "MNR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  312.    { "MDW",             "MEADOWS",           "MDWS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  313.    { "MDWS",            "MEADOWS",           "MDWS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  314.    { "MEADOW",          "MEADOWS",           "MDWS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  315.    { "MEDOWS",          "MEADOWS",           "MDWS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  316.    { "MISSN",           "MISSION",           "MSN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  317.    { "ML",              "MILL",              "ML",          Z4_P_SUFFIX|Z4_P_ALPHA },
  318.    { "MLS",             "MILLS",             "MLS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  319.    { "MNR",             "MANOR",             "MNR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  320.    { "MNRS",            "MANOR",             "MNR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  321.    { "MNT",             "MOUNT",             "MT",          Z4_P_SUFFIX|Z4_P_ALPHA },
  322.    { "MNTAIN",          "MOUNTAIN",          "MTN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  323.    { "MNTN",            "MOUNTAIN",          "MTN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  324.    { "MNTNS",           "MOUNTAIN",          "MTN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  325.     { "MOUNTAINS",       "MOUNTAIN",          "MTN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  326.    { "MOUNTIN",         "MOUNTAIN",          "MTN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  327.    { "MSN",             "MISSION",           "MSN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  328.    { "MSSN",            "MISSION",           "MSN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  329.    { "MT",              "MOUNT",             "MT",          Z4_P_SUFFIX|Z4_P_ALPHA },
  330.    { "MTIN",            "MOUNTAIN",          "MTN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  331.    { "MTN",             "MOUNTAIN",          "MTN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  332.    { "N",               "NORTH",             "N",           Z4_P_DIR|Z4_P_ALPHA    },
  333.    { "NO",              "NORTH",             "N",           Z4_P_DIR|Z4_P_ALPHA    },
  334.    { "NCK",             "NECK",              "NCK",         Z4_P_SUFFIX|Z4_P_ALPHA },
  335.    { "NE",              "NORTHEAST",         "NE",          Z4_P_DIR|Z4_P_ALPHA    },
  336.    { "NW",              "NORTHWEST",         "NW",          Z4_P_DIR|Z4_P_ALPHA    },
  337.    { "OFC",             "OFFICE",            "OFC",         Z4_P_UNIT|Z4_P_EXCEPT|Z4_P_ALPHA   },
  338.    { "ORCH",            "ORCHARD",           "ORCH",        Z4_P_SUFFIX|Z4_P_ALPHA },
  339.    { "ORCHRD",          "ORCHARD",           "ORCH",        Z4_P_SUFFIX|Z4_P_ALPHA },
  340.    { "OVAL",            "OVAL",              "OVAL",        Z4_P_SUFFIX|Z4_P_ALPHA },
  341.    { "OVL",             "OVAL",              "OVAL",        Z4_P_SUFFIX|Z4_P_ALPHA },
  342.    { "PARK",            "PARK",              "PARK",        Z4_P_SUFFIX|Z4_P_ALPHA },
  343.    { "PARKS",           "PARK",              "PARK",        Z4_P_SUFFIX|Z4_P_ALPHA },
  344.    { "PARKWAYS",        "PARKWAY",           "PKY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  345.    { "PARKWY",          "PARKWAY",           "PKY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  346.    { "PASS",            "PASS",              "PASS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  347.    { "PATH",            "PATH",              "PATH",        Z4_P_SUFFIX|Z4_P_ALPHA },
  348.    { "PATHS",           "PATH",              "PATH",        Z4_P_SUFFIX|Z4_P_ALPHA },
  349.    { "PH",              "PENTHOUSE",         "PH",          Z4_P_UNIT|Z4_P_EXCEPT|Z4_P_ALPHA   },
  350.    { "PIER",            "PEIR",              "PIER",        Z4_P_UNIT|Z4_P_ALPHA   },
  351.    { "PIKES",           "PIKE",              "PIKE",        Z4_P_SUFFIX|Z4_P_ALPHA },
  352.    { "PINE",            "PINES",             "PNES",        Z4_P_SUFFIX|Z4_P_ALPHA },
  353.    { "PKWAY",           "PARKWAY",           "PKY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  354.    { "PKWY",            "PARKWAY",           "PKY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  355.    { "PKWYS",           "PARKWAY",           "PKY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  356.    { "PKY",             "PARKWAY",           "PKY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  357.    { "PL",              "PLACE",             "PL",          Z4_P_SUFFIX|Z4_P_ALPHA },
  358.    { "PLN",             "PLAIN",             "PLN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  359.    { "PLNS",            "PLAINS",            "PLNS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  360.    { "PLZ",             "PLAZA",             "PLZ",         Z4_P_SUFFIX|Z4_P_ALPHA },
  361.    { "PLZA",            "PLAZA",             "PLZ",         Z4_P_SUFFIX|Z4_P_ALPHA },
  362.    { "PIKE",            "PIKE",              "PIKE",        Z4_P_SUFFIX|Z4_P_ALPHA },
  363.    { "PNES",            "PINES",             "PNES",        Z4_P_SUFFIX|Z4_P_ALPHA },
  364.    { "POINTS",          "POINT",             "PT",          Z4_P_SUFFIX|Z4_P_ALPHA },
  365.     { "PORTS",           "PORT",              "PRT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  366.    { "PR",              "PRAIRIE",           "PR",          Z4_P_SUFFIX|Z4_P_ALPHA },
  367.    { "PRK",             "PARK",              "PARK",        Z4_P_SUFFIX|Z4_P_ALPHA },
  368.    { "PRR",             "PRAIRIE",           "PR",          Z4_P_SUFFIX|Z4_P_ALPHA },
  369.    { "PRT",             "PORT",              "PRT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  370.    { "PRTS",            "PORT",              "PRT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  371.    { "PT",              "POINT",             "PT",          Z4_P_SUFFIX|Z4_P_ALPHA },
  372.    { "PTS",             "POINT",             "PT",          Z4_P_SUFFIX|Z4_P_ALPHA },
  373.    { "RAD",             "RADIAL",            "RADL",        Z4_P_SUFFIX|Z4_P_ALPHA },
  374.    { "RADIEL",          "RADIAL",            "RADL",        Z4_P_SUFFIX|Z4_P_ALPHA },
  375.    { "RADL",            "RADIAL",            "RADL",        Z4_P_SUFFIX|Z4_P_ALPHA },
  376.    { "RANCHES",         "RANCH",             "RNCH",        Z4_P_SUFFIX|Z4_P_ALPHA },
  377.    { "RAPID",           "RAPIDS",            "RPDS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  378.    { "RD",              "ROAD",              "RD",          Z4_P_SUFFIX|Z4_P_ALPHA },
  379.    { "RDG",             "RIDGE",             "RDG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  380.    { "RDGE",            "RIDGE",             "RDG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  381.    { "RDGS",            "RIDGE",             "RDG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  382.    { "RDS",             "ROAD",              "RD",          Z4_P_SUFFIX|Z4_P_ALPHA },
  383.    { "REAR",            "REAR",              "REAR",        Z4_P_UNIT|Z4_P_EXCEPT|Z4_P_ALPHA   },
  384.    { "RIDGES",          "RIDGE",             "RDG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  385.    { "RIV",             "RIVER",             "RIV",         Z4_P_SUFFIX|Z4_P_ALPHA },
  386.    { "RIVR",            "RIVER",             "RIV",         Z4_P_SUFFIX|Z4_P_ALPHA },
  387.    { "RM",              "ROOM",              "RM",          Z4_P_UNIT|Z4_P_ALPHA   },
  388.    { "RNCH",            "RANCH",             "RNCH",        Z4_P_SUFFIX|Z4_P_ALPHA },
  389.    { "RNCHS",           "RANCH",             "RNCH",        Z4_P_SUFFIX|Z4_P_ALPHA },
  390.    { "ROADS",           "ROAD",              "RD",          Z4_P_SUFFIX|Z4_P_ALPHA },
  391.    { "ROW",             "ROW",               "ROW",         Z4_P_SUFFIX|Z4_P_ALPHA },
  392.    { "RPD",             "RAPIDS",            "RPDS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  393.    { "RPDS",            "RAPIDS",            "RPDS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  394.    { "RST",             "REST",              "RST",         Z4_P_SUFFIX|Z4_P_ALPHA },
  395.    { "RUN",             "RUN",               "RUN",         Z4_P_SUFFIX|Z4_P_ALPHA },
  396.    { "RVR",             "RIVER",             "RIV",         Z4_P_SUFFIX|Z4_P_ALPHA },
  397.    { "S",               "SOUTH",             "S",           Z4_P_DIR|Z4_P_ALPHA    },
  398.    { "SO",              "SOUTH",             "S",           Z4_P_DIR|Z4_P_ALPHA    },
  399.    { "SE",              "SOUTHEAST",         "SE",          Z4_P_DIR|Z4_P_ALPHA    },
  400.    { "SHL",             "SHOAL",             "SHL",         Z4_P_SUFFIX|Z4_P_ALPHA },
  401.    { "SHLS",            "SHOALS",            "SHLS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  402.     { "SHOAR",           "SHORE",             "SHR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  403.    { "SHOARS",          "SHORES",            "SHRS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  404.    { "SHR",             "SHORE",             "SHR",         Z4_P_SUFFIX|Z4_P_ALPHA },
  405.    { "SHRS",            "SHORES",            "SHRS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  406.    { "SIDE",            "SIDE",              "SIDE",        Z4_P_UNIT|Z4_P_EXCEPT|Z4_P_ALPHA  },
  407.    { "SLIP",            "SLIP",              "SLIP",        Z4_P_UNIT|Z4_P_ALPHA   },
  408.    { "SMT",             "SUMMIT",            "SMT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  409.    { "SPG",             "SPRING",            "SPG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  410.    { "SPGS",            "SPRINGS",           "SPGS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  411.    { "SPNG",            "SPRING",            "SPG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  412.    { "SPNGS",           "SPRINGS",           "SPGS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  413.    { "SPRNG",           "SPRING",            "SPG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  414.    { "SPRNGS",          "SPRINGS",           "SPGS",        Z4_P_SUFFIX|Z4_P_ALPHA },
  415.    { "SPUR",            "SPUR",              "SPUR",        Z4_P_SUFFIX|Z4_P_ALPHA },
  416.    { "SPURS",           "SPUR",              "SPUR",        Z4_P_SUFFIX|Z4_P_ALPHA },
  417.    { "SQ",              "SQUARE",            "SQ",          Z4_P_SUFFIX|Z4_P_ALPHA },
  418.    { "SQR",             "SQUARE",            "SQ",          Z4_P_SUFFIX|Z4_P_ALPHA },
  419.    { "SQRE",            "SQUARE",            "SQ",          Z4_P_SUFFIX|Z4_P_ALPHA },
  420.    { "SQRS",            "SQUARE",            "SQ",          Z4_P_SUFFIX|Z4_P_ALPHA },
  421.    { "SQU",             "SQUARE",            "SQ",          Z4_P_SUFFIX|Z4_P_ALPHA },
  422.    { "SQUARES",         "SQUARE",            "SQ",          Z4_P_SUFFIX|Z4_P_ALPHA },
  423.    { "ST",              "STREET",            "ST",          Z4_P_SUFFIX|Z4_P_ALPHA },
  424.    { "STA",             "STATION",           "STA",         Z4_P_SUFFIX|Z4_P_ALPHA },
  425.    { "STATN",           "STATION",           "STA",         Z4_P_SUFFIX|Z4_P_ALPHA },
  426.    { "STE",             "SUITE",             "STE",         Z4_P_UNIT|Z4_P_ALPHA   },
  427.    { "STN",             "STATION",           "STA",         Z4_P_SUFFIX|Z4_P_ALPHA },
  428.    { "STOP",            "STOP",              "STOP",        Z4_P_UNIT|Z4_P_ALPHA   },
  429.    { "STR",             "STREET",            "ST",          Z4_P_SUFFIX|Z4_P_ALPHA },
  430.    { "STRA",            "STRAVENUE",         "STRA",        Z4_P_SUFFIX|Z4_P_ALPHA },
  431.    { "STRAV",           "STRAVENUE",         "STRA",        Z4_P_SUFFIX|Z4_P_ALPHA },
  432.    { "STRAVE",          "STRAVENUE",         "STRA",        Z4_P_SUFFIX|Z4_P_ALPHA },
  433.    { "STRAVEN",         "STRAVENUE",         "STRA",        Z4_P_SUFFIX|Z4_P_ALPHA },
  434.    { "STRAVN",          "STRAVENUE",         "STRA",        Z4_P_SUFFIX|Z4_P_ALPHA },
  435.    { "STREETS",         "STREET",            "ST",          Z4_P_SUFFIX|Z4_P_ALPHA },
  436.    { "STREME",          "STREAM",            "STRM",        Z4_P_SUFFIX|Z4_P_ALPHA },
  437.    { "STRM",            "STREAM",            "STRM",        Z4_P_SUFFIX|Z4_P_ALPHA },
  438.    { "STRT",            "STREET",            "ST",          Z4_P_SUFFIX|Z4_P_ALPHA },
  439.    { "STRVN",           "STRAVENUE",         "STRA",        Z4_P_SUFFIX|Z4_P_ALPHA },
  440.     { "STRVNUE",         "STRAVENUE",         "STRA",        Z4_P_SUFFIX|Z4_P_ALPHA },
  441.    { "SUMIT",           "SUMMIT",            "SMT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  442.    { "SUMITT",          "SUMMIT",            "SMT",         Z4_P_SUFFIX|Z4_P_ALPHA },
  443.    { "SW",              "SOUTHWEST",         "SW",          Z4_P_DIR|Z4_P_ALPHA    },
  444.    { "TER",             "TERRACE",           "TER",         Z4_P_SUFFIX|Z4_P_ALPHA },
  445.    { "TERR",            "TERRACE",           "TER",         Z4_P_SUFFIX|Z4_P_ALPHA },
  446.    { "TPK",             "TURNPIKE",          "TPKE",        Z4_P_SUFFIX|Z4_P_ALPHA },
  447.     { "TPKE",            "TURNPIKE",          "TPKE",        Z4_P_SUFFIX|Z4_P_ALPHA },
  448.    { "TRACES",          "TRACE",             "TRCE",        Z4_P_SUFFIX|Z4_P_ALPHA },
  449.    { "TRACKS",          "TRACK",             "TRAK",        Z4_P_SUFFIX|Z4_P_ALPHA },
  450.    { "TRAILS",          "TRAIL",             "TRL",         Z4_P_SUFFIX|Z4_P_ALPHA },
  451.    { "TRAK",            "TRACK",             "TRAK",        Z4_P_SUFFIX|Z4_P_ALPHA },
  452.    { "TRCE",            "TRACE",             "TRCE",        Z4_P_SUFFIX|Z4_P_ALPHA },
  453.    { "TRK",             "TRACK",             "TRAK",        Z4_P_SUFFIX|Z4_P_ALPHA },
  454.    { "TRKS",            "TRACK",             "TRAK",        Z4_P_SUFFIX|Z4_P_ALPHA },
  455.    { "TRL",             "TRAIL",             "TRL",         Z4_P_SUFFIX|Z4_P_ALPHA },
  456.     { "TRLR",            "TRAILER",           "TRLR",            Z4_P_UNIT|Z4_P_SUFFIX|Z4_P_ALPHA },
  457.     { "TRLS",            "TRAIL",             "TRL",         Z4_P_SUFFIX|Z4_P_ALPHA },
  458.     { "TRNPK",           "TURNPIKE",          "TPKE",        Z4_P_SUFFIX|Z4_P_ALPHA },
  459.     { "TUNEL",           "TUNNEL",            "TUNL",        Z4_P_SUFFIX|Z4_P_ALPHA },
  460.     { "TUNL",            "TUNNEL",            "TUNL",        Z4_P_SUFFIX|Z4_P_ALPHA },
  461.     { "TUNLS",           "TUNNEL",            "TUNL",        Z4_P_SUFFIX|Z4_P_ALPHA },
  462.     { "TUNNELS",         "TUNNEL",            "TUNL",        Z4_P_SUFFIX|Z4_P_ALPHA },
  463.     { "TUNNL",           "TUNNEL",            "TUNL",        Z4_P_SUFFIX|Z4_P_ALPHA },
  464.     { "TURNPK",          "TURNPIKE",          "TPKE",        Z4_P_SUFFIX|Z4_P_ALPHA },
  465.     { "UN",              "UNION",             "UN",          Z4_P_SUFFIX|Z4_P_ALPHA },
  466.     { "UNIONS",          "UNION",             "UN",          Z4_P_SUFFIX|Z4_P_ALPHA },
  467.    { "UNIT",            "UNIT",              "UNIT",        Z4_P_UNIT|Z4_P_ALPHA   },
  468.     { "UPPR",            "UPPER",             "UPPR",        Z4_P_UNIT|Z4_P_EXCEPT|Z4_P_ALPHA   },
  469.     { "VALLEYS",         "VALLEY",            "VLY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  470.     { "VALLY",           "VALLEY",            "VLY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  471.     { "VDCT",            "VIADUCT",           "VIA",         Z4_P_SUFFIX|Z4_P_ALPHA },
  472.     { "VIA",             "VIADUCT",           "VIA",         Z4_P_SUFFIX|Z4_P_ALPHA },
  473.     { "VIADCT",          "VIADUCT",           "VIA",         Z4_P_SUFFIX|Z4_P_ALPHA },
  474.     { "VIEWS",           "VIEW",              "VW",          Z4_P_SUFFIX|Z4_P_ALPHA },
  475.     { "VILL",            "VILLAGE",           "VLG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  476.     { "VILLAG",          "VILLAGE",           "VLG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  477.     { "VILLAGES",        "VILLAGE",           "VLG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  478.     { "VILLG",           "VILLAGE",           "VLG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  479.     { "VILLIAGE",        "VILLAGE",           "VLG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  480.     { "VIS",             "VISTA",             "VIS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  481.     { "VIST",            "VISTA",             "VIS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  482.     { "VL",              "VILLE",             "VL",          Z4_P_SUFFIX|Z4_P_ALPHA },
  483.     { "VLG",             "VILLAGE",           "VLG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  484.     { "VLGS",            "VILLAGE",           "VLG",         Z4_P_SUFFIX|Z4_P_ALPHA },
  485.     { "VLLY",            "VALLEY",            "VLY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  486.     { "VLY",             "VALLEY",            "VLY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  487.     { "VLYS",            "VALLEY",            "VLY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  488.     { "VST",             "VISTA",             "VIS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  489.     { "VSTA",            "VISTA",             "VIS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  490.     { "VW",              "VIEW",              "VW",          Z4_P_SUFFIX|Z4_P_ALPHA },
  491.     { "VWS",             "VIEW",              "VW",          Z4_P_SUFFIX|Z4_P_ALPHA },
  492.     { "W",               "WEST",              "W",           Z4_P_DIR|Z4_P_ALPHA    },
  493.     { "WALK",            "WALK",              "WALK",        Z4_P_SUFFIX|Z4_P_ALPHA },
  494.     { "WALKS",           "WALK",              "WALK",        Z4_P_SUFFIX|Z4_P_ALPHA },
  495.     { "WAY",             "WAY",               "WAY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  496.     { "WAYS",            "WAY",               "WAY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  497.     { "WELL",            "WELLS",             "WLS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  498.     { "WLS",             "WELLS",             "WLS",         Z4_P_SUFFIX|Z4_P_ALPHA },
  499.     { "WY",              "WAY",               "WAY",         Z4_P_SUFFIX|Z4_P_ALPHA },
  500.     { "XING",            "CROSSING",          "XING",        Z4_P_SUFFIX|Z4_P_ALPHA },
  501.     { "HC",                "HC",                     "HC",           Z4_P_HC|Z4_P_ALPHA|Z4_P_EOW },
  502.     { "RR",                "RR",                     "RR",           Z4_P_RR|Z4_P_ALPHA|Z4_P_EOW },
  503.     { "RFD",                "RR",                     "RR",           Z4_P_RR|Z4_P_ALPHA|Z4_P_EOW },
  504.     { "RT",                "RR",                     "RR",           Z4_P_RR|Z4_P_ALPHA|Z4_P_EOW },
  505.     { "POB",                "POB",                     "POB",           Z4_P_POB|Z4_P_ALPHA|Z4_P_EOW },
  506.    { "BOX",             "BOX",                 "BOX",         Z4_P_UNIT|Z4_P_ALPHA   },
  507.     {     NULL }
  508.     };
  509.  
  510.  
  511. #define MAX_WORDS        (4096)
  512. static SIZET cWords = 0;
  513. static CHAR chWords[MAX_WORDS];
  514. static Z4_AB abbrev[MAX_ENTRIES];
  515.  
  516.  
  517. //----------------------------------------------------------------------------
  518. //    Globals
  519. //----------------------------------------------------------------------------
  520.  
  521. //
  522. // A useless string which is simply embedded in the executable.
  523. //
  524. PSZ __pszCredits__ = "Written by John M Weeder, 1993";
  525.  
  526.  
  527. //
  528. //    This should contain a program description which will be displayed as
  529. //    part of the program's help text.
  530. //
  531. static PCSZ pcszDescription =
  532.     "This program generates the various tables used by the ZIP+4 engine.";
  533.  
  534. //
  535. //    Program command line options
  536. //
  537. static BS_CMDOPT acmdopt[] =
  538.     {
  539.     BS_CMDOPT_NULL,
  540.     };
  541.  
  542.  
  543. //----------------------------------------------------------------------------
  544. //   Description:    Sort routine used by qsort to sort an array of record ids.
  545. //    Parameters:    see qsort()
  546. //       Returns:    see qsort()
  547. //----------------------------------------------------------------------------
  548. static int __recsort__(const void *pv1, const void *pv2)
  549. {
  550.     Z4_ABBR_ENTRY *prec1 = (Z4_ABBR_ENTRY *)pv1;
  551.     Z4_ABBR_ENTRY *prec2 = (Z4_ABBR_ENTRY *)pv2;
  552.  
  553.     return stricmp(prec1->psz1, prec2->psz1);
  554. }
  555.  
  556.  
  557. //----------------------------------------------------------------------------
  558. //   Description:    Sort routine used by qsort to sort an array of record ids.
  559. //    Parameters:    see qsort()
  560. //       Returns:    see qsort()
  561. //----------------------------------------------------------------------------
  562. static void Add(PSZ psz1, PSZ psz2, PSZ psz3, FLAG16 fs)
  563. {
  564.     SIZET i;
  565.  
  566.     for (i = 0; i < cEntries; ++i)
  567.         if (strcmp(psz1, entry[i].psz1) == 0
  568.         && strcmp(psz2, entry[i].psz2) == 0)
  569.             {
  570.             if (strcmp(psz3, entry[i].psz3) != 0 || fs != entry[i].fs)
  571.                 {
  572.                 Output("Conflicting entries for '%s'\n", psz1);
  573.                 exit(99);
  574.                 }
  575.             return ;
  576.             }
  577.     if (cEntries >= MAX_ENTRIES)
  578.         {
  579.         Output("Abbreviation table is full.\n");
  580.         exit(99);
  581.         }
  582.     entry[cEntries].psz1 = psz1;
  583.     entry[cEntries].psz2 = psz2;
  584.     entry[cEntries].psz3 = psz3;
  585.     entry[cEntries].fs = fs;
  586.     cEntries++;
  587.     return ;
  588. }
  589.  
  590.  
  591. //----------------------------------------------------------------------------
  592. //   Description:    Sort routine used by qsort to sort an array of record ids.
  593. //    Parameters:    see qsort()
  594. //       Returns:    see qsort()
  595. //----------------------------------------------------------------------------
  596. static SIZET AddWord(PSZ psz)
  597. {
  598.     SIZET i;
  599.     SIZET cLen = strlen(psz);
  600.  
  601.     for (i = 0; i < cWords; )
  602.         {
  603.         SIZET cWord = strlen(chWords + i);
  604.  
  605.         if (cWord == cLen && strcmp(psz, chWords + i) == 0)
  606.             return i;
  607.  
  608.         i += cWord + 1;
  609.         }
  610.     if (cWords + cLen + 1 >= MAX_WORDS)
  611.         {
  612.         Output("Word arrary is full.\n");
  613.         exit(99);
  614.         }
  615.     strcpy(chWords + cWords, psz);
  616.     i = cWords;
  617.     cWords += cLen + 1;
  618.     return i;
  619. }
  620.  
  621.  
  622. //----------------------------------------------------------------------------
  623. //   Description:    main() - Program entry point
  624. //    Parameters:    Standard C parameters
  625. //       Returns:    DOS return code.
  626. //----------------------------------------------------------------------------
  627. int main(int argc, char **argv)
  628. {
  629. static BS_CFG cfg = CFG_DFT;
  630.     int retval = 99;
  631.     SIZET i, j;
  632.     FILE *file;
  633.  
  634.     //
  635.     //    Initialize base library
  636.     //
  637.     BaseLibraryInitialize(argc, argv, &cfg);
  638.     BaseTitle("$Revision:  93.1  $", __DATE__, __TIME__, "9-Digit ZIP Disc Abbreviation List Build");
  639.     if (!BaseTitleHelp(acmdopt, pcszDescription, NULL))
  640.         return 99;
  641.  
  642.     Output("Cleaning up table...");
  643.     for (cEntries = 0; entry[cEntries].psz1; ++cEntries)
  644.         {
  645.         strupr(entry[cEntries].psz1);
  646.         strupr(entry[cEntries].psz2);
  647.         strupr(entry[cEntries].psz3);
  648.         }
  649.     Output("\n");
  650.  
  651.     Output("Inserting abbreviated spelling cross reference entries...");
  652.     j = cEntries;
  653.     for (i = 0; i < j; ++i)
  654.         Add(entry[i].psz3, entry[i].psz2, entry[i].psz3, entry[i].fs);
  655.     Output("\n");
  656.  
  657.     Output("Inserting full spelling cross reference entries...");
  658.     j = cEntries;
  659.     for (i = 0; i < j; ++i)
  660.         Add(entry[i].psz2, entry[i].psz2, entry[i].psz3, entry[i].fs);
  661.     Output("\n");
  662.  
  663.     Output("Sorting table...");
  664.     qsort(entry, cEntries, sizeof(Z4_ABBR_ENTRY), __recsort__);
  665.     Output("\n");
  666.  
  667.     Output("Creating abbreviation list...");
  668.     for (i = 0; i < cEntries; ++i)
  669.         {
  670.         abbrev[i].cWord   = AddWord(entry[i].psz1);
  671.         abbrev[i].cFull   = AddWord(entry[i].psz2);
  672.         abbrev[i].cAbbrev = AddWord(entry[i].psz3);
  673.         abbrev[i].fs      = entry[i].fs;
  674.         }
  675.     Output("\n");
  676.  
  677.     Output("Opening output...\n");
  678.     file = fopen("abbrev.dat", "w+t");
  679.     if (file == NULL)
  680.         {
  681.         Output("Can't open output file.\n");
  682.         exit(99);
  683.         }
  684.  
  685.     Output("Writing word array...");
  686.     fprintf(file, "CHAR _FAR_ __chWordTable[] =\n");
  687.     fprintf(file, "   {\n");
  688.     for (i = 0; i < cWords; )
  689.         {
  690.         fprintf(file, "   ");
  691.         for (j = 0; j < 16 && i < cWords; ++j, ++i)
  692.             {
  693.             if (chWords[i])
  694.                 fprintf(file, "'%c',", chWords[i]);
  695.             else
  696.                 fprintf(file, " 0 ,");
  697.             }
  698.         fprintf(file, "\n");
  699.         }
  700.     fprintf(file, "   };\n");
  701.     Output("\n%u bytes in word table.\n", cWords);
  702.  
  703.     Output("Writing abbreviation list...\n");
  704.     fprintf(file, "\n\nZ4_AB _FAR_ __abbrevTable[] =\n");
  705.     fprintf(file, "   {\n");
  706.     for (i = 0; i < cEntries; ++i)
  707.         {
  708.         CHAR szType[40];
  709.         FLAG16 fs = abbrev[i].fs;
  710.  
  711.         szType[0] = '\0';
  712.         if (fs & Z4_P_SUFFIX)
  713.             {
  714.             fs &= ~Z4_P_SUFFIX;
  715.             strcat(szType, "Z4_P_SUFFIX");
  716.             }
  717.         if (fs & Z4_P_DIR)
  718.             {
  719.             fs &= ~Z4_P_DIR;
  720.             if (szType[0])
  721.                 strcat(szType, "|");
  722.             strcat(szType, "Z4_P_DIR");
  723.             }
  724.         if (fs & Z4_P_UNIT)
  725.             {
  726.             fs &= ~Z4_P_UNIT;
  727.             if (szType[0])
  728.                 strcat(szType, "|");
  729.             strcat(szType, "Z4_P_UNIT");
  730.             }
  731.         if (fs & Z4_P_EXCEPT)
  732.             {
  733.             fs &= ~Z4_P_EXCEPT;
  734.             if (szType[0])
  735.                 strcat(szType, "|");
  736.             strcat(szType, "Z4_P_EXCEPT");
  737.             }
  738.         if (fs & Z4_P_ALPHA)
  739.             {
  740.             fs &= ~Z4_P_ALPHA;
  741.             if (szType[0])
  742.                 strcat(szType, "|");
  743.             strcat(szType, "Z4_P_ALPHA");
  744.             }
  745.         if (fs & Z4_P_OTHER)
  746.             {
  747.             fs &= ~Z4_P_OTHER;
  748.             if (szType[0])
  749.                 strcat(szType, "|");
  750.             strcat(szType, "Z4_P_OTHER");
  751.             }
  752.         if (fs & Z4_P_NUMERIC)
  753.             {
  754.             fs &= ~Z4_P_NUMERIC;
  755.             if (szType[0])
  756.                 strcat(szType, "|");
  757.             strcat(szType, "Z4_P_NUMERIC");
  758.             }
  759.         if (fs & Z4_P_POB)
  760.             {
  761.             fs &= ~Z4_P_POB;
  762.             if (szType[0])
  763.                 strcat(szType, "|");
  764.             strcat(szType, "Z4_P_POB");
  765.             }
  766.         if (fs & Z4_P_HC)
  767.             {
  768.             fs &= ~Z4_P_HC;
  769.             if (szType[0])
  770.                 strcat(szType, "|");
  771.             strcat(szType, "Z4_P_HC");
  772.             }
  773.         if (fs & Z4_P_RR)
  774.             {
  775.             fs &= ~Z4_P_RR;
  776.             if (szType[0])
  777.                 strcat(szType, "|");
  778.             strcat(szType, "Z4_P_RR");
  779.             }
  780.         if (fs & Z4_P_GD)
  781.             {
  782.             fs &= ~Z4_P_GD;
  783.             if (szType[0])
  784.                 strcat(szType, "|");
  785.             strcat(szType, "Z4_P_GD");
  786.             }
  787.         if (fs & Z4_P_PM)
  788.             {
  789.             fs &= ~Z4_P_PM;
  790.             if (szType[0])
  791.                 strcat(szType, "|");
  792.             strcat(szType, "Z4_P_PM");
  793.             }
  794.         if (fs & Z4_P_ORDINAL)
  795.             {
  796.             fs &= ~Z4_P_ORDINAL;
  797.             if (szType[0])
  798.                 strcat(szType, "|");
  799.             strcat(szType, "Z4_P_ORDINAL");
  800.             }
  801.         if (fs & Z4_P_EOW)
  802.             {
  803.             fs &= ~Z4_P_EOW;
  804.             if (szType[0])
  805.                 strcat(szType, "|");
  806.             strcat(szType, "Z4_P_EOW");
  807.             }
  808.         fprintf(file, "   {0x%04X, 0x%04X, 0x%04X, 0%-39s}, // %s\n",
  809.             abbrev[i].cWord, abbrev[i].cFull, abbrev[i].cAbbrev, "",
  810.             chWords + abbrev[i].cWord);
  811.         Assert(fs == 0);
  812.         Output("%-15s %-15s %-10s %-32s\n",
  813.             chWords + abbrev[i].cWord, chWords + abbrev[i].cFull,
  814.             chWords + abbrev[i].cAbbrev, szType);
  815.         }
  816.     // Last element points to empty string!!
  817.     fprintf(file, "   {0x%04X, 0x%04X, 0x%04X, %-40s}, // End of list\n",
  818.         cWords - 1, cWords - 1, cWords - 1, "");
  819.     fprintf(file, "   };\n");
  820.  
  821.     Output("Writing suffix list...\n");
  822.     fprintf(file, "\n\nZ4_SF _FAR_ __suffixTable[] =\n");
  823.     fprintf(file, "   {\n");
  824.     fprintf(file, "   { 0x%04X, 0x%04X },                 // Blank suffix\n",
  825.         cWords - 1, cWords - 1);
  826.     for (i = 0; i < cEntries; ++i)
  827.         {
  828.         PSZ pszWord   = chWords + abbrev[i].cWord;
  829.         PSZ pszFull   = chWords + abbrev[i].cFull;
  830.         PSZ pszAbbrev = chWords + abbrev[i].cAbbrev;
  831.              
  832.         if (BTEST(abbrev[i].fs, Z4_P_SUFFIX)
  833.         && strcmp(pszWord, pszAbbrev) == 0)
  834.             {
  835.            fprintf(file, "   { 0x%04X, 0x%04X },                 // %-4s %s\n",
  836.                abbrev[i].cWord, abbrev[i].cFull, pszAbbrev, pszFull);
  837.  
  838.            Output("%-15s %-15s\n", pszWord, pszFull);
  839.             }
  840.         }
  841.     fprintf(file, "   };\n\n");
  842.  
  843.     fclose(file);
  844.     Output("\nDone. (%u entries)\n", cEntries);
  845.     return retval;
  846. }
  847. //----------------------------------------------------------------------------
  848. //------------------------------- End of File --------------------------------
  849. //----------------------------------------------------------------------------
  850.